#ifndef FILEORGANIZER_H
#define FILEORGANIZER_H

#include <QObject>          // 包含QObject基类
#include <QString>          // 包含Qt字符串类
#include <QList>            // 包含Qt列表类
#include <QMap>             // 包含Qt映射类
#include <QFileInfo>        // 包含文件信息类

// 文件信息结构体
struct FileInfo {
    QString name;           // 文件名
    QString path;           // 文件路径
    QString category;       // 文件分类
    qint64 size;            // 文件大小（字节）
    QString sizeString;     // 格式化后的大小字符串
    QString extension;      // 文件扩展名
    QString lastModified;   // 最后修改时间
};

class FileOrganizer : public QObject
{
    Q_OBJECT  // Qt宏，启用信号槽机制

public:
    explicit FileOrganizer(QObject* parent = nullptr);  // 构造函数

    // 扫描桌面文件
    void scanDesktopFiles();
    // 按类型整理文件
    void organizeByType();
    // 按扩展名整理文件
    void organizeByExtension();
    // 创建分类文件夹
    bool createCategoryFolders();
    // 移动文件到分类文件夹
    void moveFilesToCategories();

    // 获取文件列表
    QList<FileInfo> getFileList() const { return fileList; }
    // 获取分类统计
    QMap<QString, int> getCategoryStats() const { return categoryStats; }
    // 获取总文件大小
    qint64 getTotalSize() const { return totalSize; }

signals:
    // 信号：进度更新
    void progressUpdated(int value, const QString& message);
    // 信号：操作完成
    void operationFinished();
    // 信号：错误发生
    void errorOccurred(const QString& errorMessage);

private:
    // 获取桌面路径
    QString getDesktopPath();
    // 获取文件分类
    QString getFileCategory(const QString& filename);
    // 格式化文件大小
    QString formatFileSize(qint64 size);
    // 获取文件信息
    FileInfo getFileInfo(const QFileInfo& fileInfo);

    QList<FileInfo> fileList;           // 文件列表
    QMap<QString, int> categoryStats;   // 分类统计
    qint64 totalSize;                   // 总文件大小
    QString desktopPath;                // 桌面路径
};

#endif // FILEORGANIZER_H